﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ComponentModel;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Common.Exceptions.FaultContracts;

namespace Sinacor.Servico.Bovespa.Contabil.Service.ServiceContract
{
    /// <summary>
    /// Service.ServiceContract Interface - IContaContabil
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Contabil.Service.ServiceContract", Name = "IContaContabil", SessionMode = SessionMode.Allowed)]
    public interface IContaContabil
    {
        #region Membros

        /// <summary>
        /// Serviço irá Consultar uma lista de ContasContabeis, utilizando o parâmetro informado.
        /// </summary>
        /// <param name="request">DataContract.Request.FiltroContaContabilRequest</param>
        /// <returns>Lista de contratos de dados do tipo DataContract.Response.ContaContabilResponse</returns>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ConsultarContasContabeis")]
        List<DataContract.Response.ContaContabilResponse> ConsultarContasContabeis(DataContract.Request.FiltroContaContabilRequest request);

        /// <summary>
        /// FGualberto - Task: 6312
        /// </summary>
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ConsultarHistoricosContabeis")]
        List<DataContract.Response.HistoricoContabilResponse> ConsultarHistoricosContabeis(DataContract.Request.FiltroHistoricoContabilRequest request);

        #endregion
    }
}